
//引用db模块
var mongodb=require('./db');

//定义一个构造函数方便调用
function Post(name,head,title,area,post){
	this.name=name;
	this.head=head;
	this.title=title;
	this.area=area;
	this.post=post;
}
//创建post接口 可对外被引用
module.exports= Post;

//存储一篇文章和相关信息

Post.prototype.save =function(callback){
	var date=new Date();
	var time ={
		date:date,
		year:date.getFullYear(),
		month:date.getFullYear()+"-"+(date.getMonth()+1),
		day:date.getFullYear()+"-"+(date.getMonth()+1)+"-"+date.getDate(),
		minute:date.getFullYear()+"-"+(date.getMonth()+1)+"-"+date.getDate()+" "+date.getHours()+":"+(date.getMinutes()<10?'0'+date.getMinutes():date.getMinutes())
	}

//要存入数据库的文档
 var post= {
 	name:this.name,
 	head:this.head,
 	time:time,
 	title:this.title,
 	area:this.area,
 	pv:0,
 	post:this.post,
 	comments:[],
 	
 	
 };

//打开db  插入文章 
mongodb.open(function(err,db){
	 if(err){
	 	return callback(err);
	 }
	//读取posts集合
	db.collection('posts',function(err,collection){
		if(err){
			mongodb.close();
			return callback(err);
		}
		//将文档插入posts集合
		collection.insert(post,{
			safe:true
		},function(err){
			mongodb.close();
			if(err){
				return callback(err);//如果失败  返回err
			}
			callback(null);//成功 返回的err为null
		});
	});
});
};

//读取文章 和相关信息
Post.getAll=function(name,callback){
	mongodb.open(function(err,db){
		if(err){
			return  callback(err);
		}
		db.collection('posts',function(err,collection){
			if(err){
				mongodb.close();
				return callback(err);
			}
			var query ={};
			if(name){
				query.name=name;
			}
			
			//跟进query对象来查询文章
			collection.find(query).sort({
				"comments":-1
			}).toArray(function(err,docs){
				/*console.log("我是"+docs);*/
				mongodb.close();
				if(err){
					return callback(err);
				}
				docs.forEach(function(doc){
				//	doc.post = markdown.toHTML(doc.post);
				});
				callback(null,docs);//成功，以数组的形式返回查询结果
			});
		
		});
	});
};
	//获取一篇文章
	Post.getOne= function(name,day,title,callback){
		mongodb.open(function(err,db){
			if(err){
				return callback(err);
			}
			db.collection('posts',function(err,collection){
			
				if(err){
					mongodb.close();
					return callback(err);
				}
				collection.findOne({
					"name":name,
					"time.day":day,
					"title":title
				},function(err,doc){
					if(err){
						mongodb.close();
						return callback(err);
					}
					if(doc){
						collection.update({
							"name":name,
							"time.day":day,
							"title":title
						},{
							//$inc修改器。它用来增加已有键的值，或者在键不存在时创建一个键
							$inc:{"pv":1}
						},function(err){  
							
                       	mongodb.close();
                        if(err) {
                        	 	
                            return callback(err);
                        }
                 		});
					
					if(doc.comments){
					doc.comments.forEach(function (comment){
					
					});
					}
				//	mongodb.close();	
					//console.log("试试"+doc.pv);
					callback(null,doc);
				//	mongodb.close();
				//	console.log("试试2"+doc.pv);
				}
				
					});
			});
		});
	};
	
	Post.search=function(searchword,callback){
		mongodb.open(function(err,db){
			if(err){
				return callback(err);
			}
			db.collection('posts',function(err,collection){
				if(err){
					mongodb.close();
					return callback(err);
				}
				var pattern = new RegExp(searchword,"i");
				collection.find({
					title:pattern
				},{
					"name":1,
					"time":1,
					"title":1,
					"post":1,
					"area":1,
					"comments":1,
					"pv":1
				}).sort({
					time:-1
				}).toArray(function(err,docs){
					mongodb.close();
					if(err){
					return callback(err);
					}
					
					callback(null,docs);
				});
			});
		});
	};

	Post.getArchive =function(callback){
		mongodb.open(function(err,db){
			if(err){
				return callback(err);
			}
			db.collection('posts',function(err,collection){
				if(err){
					mongodb.close();
					return callback(err);
				}
				collection.find({},{
					"name":1,
					"time":1,
					"title":1,
					"area":1,
					"pv":1,
					"comments":1,
					"post":1
				}).sort({
					time:-1
				}).toArray(function(err,docs){
					mongodb.close();
					if(err){
						return callback(err);
					}
					docs.forEach(function(doc){
					
				});
					callback(null,docs);
				});
			});
		});
	};

	Post.getHot =function(callback){
		mongodb.open(function(err,db){
			if(err){
				return callback(err);
			}
			db.collection('posts',function(err,collection){
				if(err){
					mongodb.close();
					return callback(err);
				}
				collection.find({},{
					"name":1,
					"time":1,
					"title":1,
					"area":1,
					"pv":1,
					"comments":1,
					"post":1
				}).sort({
					pv:-1
				}).toArray(function(err,docs){
					mongodb.close();
					if(err){
						return callback(err);
					}
					docs.forEach(function(doc){
					
				});
					callback(null,docs);
				});
			});
		});
	};

//瀑布流
Post.getFive=function(page,callback){
	var total;
	mongodb.open(function(err,db){
		if(err){
			return callback(err);
		}
		db.collection('posts',function(err,collection){
			if(err){
				mongodb.close();
				return callback(err);
			}
//			取得数据库中所有数据总数
			collection.count(function(err,count){
				total=count;
			});
			collection.find({},{
					"name":1,
					"time":1,
					"title":1,
					"area":1,
					"pv":1,
					"comments":1,
					"post":1
			}).limit(5).skip(5*(page-1)).toArray(function(err,docs){
				if(docs.length){
					if(page==Math.ceil(total/4)){
						var nextpage=Math.ceil(total/4);
					}else{
						var nextpage=parseInt(page)+1;
					}
				}
				mongodb.close();
				if(err){
						return callback(err);
					}
				callback(null,docs);
			});
		});
	});
};





Post.edit=function(name,day,title,callback){
	//打开数据库
	mongodb.open(function(err,db){
	   if(err){
	   	return callback(err);
	   }
	   db.collection('posts',function(err,collection){
	   	if(err){
	   		mongodb.close();
	   		return callback(err);
	   	}
	   	collection.findOne({
	   		"name":name,
	   		"time.day":day,
	   		"title":title
	   	},function(err,doc){
	   		mongodb.close();
	   		if(err){
	   			return callback(err);
	   		}
	   		callback(null,doc);
	   	});
	   });
	});
};

Post.update=function(name,day,title,post,callback){
	mongodb.open(function(err,db){
		if(err){
			return callback(err);
		}
		db.collection('posts',function(err,collection){
	   	if(err){
	   		mongodb.close();
	   		return callback(err);
	   	}
		collection.update({
			"name":name,
			"time.day":day,
			"title":title
			
		},{
			$set:{post:post}
		},function(err){
			mongodb.close();
			if(err){
				return callback(err);
			}
			callback(null);
		});
		});
	});
};

Post.remove =function(name,day,title,callback){

	mongodb.open(function(err,db){
		if(err){
			return callback(err);
		}
		db.collection('posts',function(err,colleciton){
			if(err){
				mongodb.close();
				return callback(err);
			}
			colleciton.remove({
				"name":name,
				"time.day":day,
				"title":title
			},function(err){
				mongodb.close();
				if(err){
					
		console.log("aaaaa1");

			return callback(err);
				}
				console.log("aaaaa2");
				callback(null);
			});
		});
	});
};
